#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#define PORT 3000

int main(int argc, char *argv[])
{
    int sockfd,newsockfd;
    struct sockaddr_in addr;
    int addr_len = sizeof(struct sockaddr_in);
    if((sockfd = socket(AF_INET,SOCK_STREAM,0)) < 0) /* 建立一个Socket */
    {
        perror("Create socket error!");
        exit(1);
    }
    else
    {
        printf("Create socket success! Socket id: %d\n", sockfd);
    }

    bzero(&addr,sizeof(struct sockaddr_in));   /* 清空表示地址的结构体变量 */
    addr.sin_family = AF_INET;                 /* 设置addr的成员信息 */
    addr.sin_port = htons(PORT);
    addr.sin_addr.s_addr = htonl(INADDR_ANY);  /* IP地址设为本机IP */
    if(bind(sockfd, (struct sockaddr *)(&addr), sizeof(struct sockaddr)) < 0) /* 调用bind函数绑定端口 */
    {
        perror("Bind error!");
        exit(1);
    }
    else
    {
        printf("Bind port success!Local port: %d\n", PORT);
    }
    if(listen(sockfd,5) < 0)  /* 调用 listen 函数监听端口号，能同时处理最大连接请求数为5 */
    {
        perror("Listen error!");
        exit(1);
    }
    else
    {
        printf("Listenning ...\n");  /* 监听中。。。 */
    }

    if((newsockfd = accept(sockfd,(struct sockaddr *)(&addr),&addr_len)) < 0) /* 调用accept 接收一个连接请求 */
    {
        printf("Accept error!");
        exit(1);
    }
    else
    {
        printf("Accepted a new connection.New socket id:%d\n", newsockfd);
    }
    close(sockfd);  /* 结束通信，关闭套接字 */

    return 0;
}
